<?php
#!/bin/bash

/**
 * User: hzbskak
 * Date: 2020/1/7 - 17:00
 */

namespace app\admin\model;

use think\Db;

/**
 * 公告模型类
 * Class PlAnnounceModel
 * @package app\admin\model
 */
class PlAnnounceModel extends CommonModel
{

    protected $table = 'pl_announce';

    /**
     * 获取公告信息
     * @date 2020年1月17日17:21:45
     * ---------------------
     * 页面初始化时：
     * 查询指定条数据，到已读列表中判断该用户是否已读，并追加颜色和标记，计算显示未读条数
     * 用户点击某条时：
     * 去已读列表中看是否有数据记录，没有查到则新增该用户与对应的公告ID并设置状态为未读，
     * 查询该条数据，到已读列表中判断该用户是否已读，并追加颜色和标记
     * ---------------------
     * @param int $id 指定公告ID
     * @param int $limit 指定公告条数
     * @param bool $is_page 是否分页
     * @return mixed
     * @throws \think\Exception
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function getAnnounce( $id = 0, $limit = 10, $is_page = false)
    {
        $map = [];
        if( $id)
        {
            $map[ 'p.id'] = [ '=', $id];

            $read = db( 'bs_admin_annonce_read')
                ->where( 'anno_id', 'eq', $id)
                ->find(); // 获取已读列表
            if( empty( $read))  // 已读列表没有查到，代表新增
            {
                ( new BsAdminAnnonceReadModel())->insert( [
                    'userid' => session( 'id'),
                    'anno_id' => $id,
                    'is_sign' => 0,
                    'add_time' => time()
                ]);
            }
        }

        if( $is_page)
        {
            $announce = Db::name('pl_announce')->alias( 'p')
                ->join( 'bs_admin b', 'p.add_admin_id = b.id')
                ->field( 'p.*,b.name')
                ->where( 'p.is_delete = 1')
                ->where( $map)
                ->order( 'add_time desc')
                ->limit( $limit)
                ->paginate( 10, false, [ 'query' => input( 'param.')]);
            $announce_list = $announce->toArray()['data'];
            $total['page']= $announce->render();
        }
        else
        {
            $announce_list = db('pl_announce')->alias( 'p')
                ->join( 'bs_admin b', 'p.add_admin_id = b.id')
                ->field( 'p.*,b.name')
                ->where( 'p.is_delete = 1')
                ->where( $map)
                ->order( 'add_time desc')
                ->limit( $limit)
                ->select();
        }

        foreach ( $announce_list as $key => $v) // 循环公告列表，去查询已读列表给是否已读追加字体颜色
        {
            $one = Db::name("bs_admin_annonce_read")
                ->where( [
                    'userid' => session('id'),
                    'anno_id' => $v['id']
                ])
                ->find();
            //已读状态
            if( !empty( $one)){
                $announce_list[$key]['is_sign'] = 1;
                if( !empty( $v['is_sign'])){
                    $announce_list[$key]['is_sign'] = $one['is_sign'];
                }
                $announce_list[$key]['color'] = 'grey';
            }else{
                //未读状态
                $announce_list[$key]['is_sign'] = 1;
                $announce_list[$key]['color'] = 'black';
            }
        }

        // 未读信息数量
        $all_count = $this->where( 'is_delete', 'eq', 1)->count();
        $read_count = $this->alias( 'p')
            ->join( 'bs_admin_annonce_read b', 'p.id = b.anno_id')
            ->where( 'b.is_sign', 'eq', 1)
            ->where( 'userid', 'eq', session( 'id'))
            ->count();
        $unread_count = $all_count - $read_count;

        // 赋值并返回
        $total['count'] = $unread_count;
        $total['arr'] = $announce_list;
        return $total;
    }


























}